Top 10k strings from Complete Machine Code Tutor, The (1984)(New Generation Software).tzx in <root> / bin / z80 / software / Sinclair Spectrum Collection TOSEC.exe / Sinclair ZX Spectrum - Utilities & Educational / Sinclair ZX Spectrum - Utilities & Educational - [TZX] (TOSEC-v2007-01-01) /

Back to the directory listing

  12 DEFM "  ADD HL,HL
   6  LD HL,STORE
   5   ADD HL,DE
   4 EX5B:DEFM " LD HL,(STORE)
   4 DEFM "using addition to successively multiply by"
   4 DEFM "number held in the HL register pair by  10"
   4 DEFM "  LD DE,(STORE)
   4 DEFM "  LD (STORE),HL
   4 DEFM "  ADD HL,DE
   4  i.e.    7 6 5 4 3 2 1 0   C
   4   LD HL,STORE
   4   LD (HL),C
   4   DJNZ LOOP
   3  i.e.  -2  is equivalent to 254 etc.
   3  i.e.      01101100
   3  ectively  multiplies  a"
   3  When  performing   arithmetic  operationswhich  we  wish  to  interpret  within therange  -128 to +127,  the  Carry  flag  nolonger  signals  an out  of  range result.However another  flag, the overflow  (P/V)flag does. It is a "1" whenever the answeris outside the range  -128 to +127 and "0"within  the  range.  It  is  effectively acarry into bit 7 which would make the signbit incorrect.
   3  There is no reason for sticking to 8 bitsusing this method.  So long as the  numberof  bits  is  sufficient   and  the   mostsignificant bit is taken as  the sign  bitany size positive or negative  number  canbe represented.
   3  The  Z80 has two instructions that may beused for these operations
   3  The  Sign  and  overflow  flags  are alsooperative after ADC and SBC instruction onthe HL register. It reflects the  15th bit(or bit 7 of H register) .
   3  Performing  a  similar calculation to theabove we can show that a register pair canrepresent a number in the  range +32767 to-32768.
   3  NEG   negates,  or  makes  negative,  the       contents  of  the  Accumulator   by       complementing  and  adding 1 in one       operation.
   3  Load further lessons from tape
   3  It is important to remember that the ZeroCarry, Sign, and overflow flags are alwaysoperative   after  an   8  bit  arithmeticinstruction or a 16 bit addition involvingthe  Carry.   Your  interpretation  of theresult determines which flag(s) you shouldbe interested in.
   3  CPL   complements or inverts the contents       of the Accumulator.
   3  Although  these examples appear to be allpositive, they  can  be  viewed equally asnegative where appropriate  and  the  Signand  overflow  flags  observed  operating.Remember a  number above 128 is a negativenumber. Since all the negative numbers  inthe examples are small,  they  can be seenquickly   and   simply  be  converted   bysubtracting the number from 256.
   3  A Sign flag  (S) is  provided on the Z80.It  duplicates  the sign ( bit 7 ) of  theanswer after  any  arithmetic operation onthe Accumulator. The sign flag is  "0" fora positive result  and  "1" for a negativeresult.
   3   LD DE,FFFEH
   3   LD A,(ST1)
   3   LD (ST3),A
   3   LD (HL),L
   3   LD (DE),A
   3   DJNZ LOOP2
   3   ADD HL,HL
   3      EXAMPLES OF +VE AND -VE NOTATION
   2 ve number we can holdin a single register,  using this notationis  01111111   or  127  and   the  largestnegative number 10000000 or -128.
   2 the number
   2 Three   types,   or   modes,  of  maskableinterrupts are available.
   2 The  programmer  can arrange that maskableinterrupts  (MI) are ignored.   Within theZ80 there is a flag,  the interrupt enableflag,   that  can  be   set  and  cleared.Depending upon the state of this  flag  MIwill be accepted or ignored.
   2 DEFM "  RET
   2 (viii)Return from interrupt (RETI).
   2 (vii) Enables interrupts
   2 (vi)  POP or EXchange registers.
   2 (v)   Disable interrupt if required.
   2 (iv)  Do interrupt routine.
   2 (ii ) PUSH or EXchange required registered(iii) Enables interrupt if required.
   2 (i)   Enter maskable interrupt, interrupts      are disabled at this time.
   2  i.e.    C   7 6 5 4 3 2 1 0
   2  You  should  now  be  able  to  use otherassemblers  to  write  your own  programs.You  will  find  that  most  are  not   souser  friendly,  and  that  you  will  notbe  able  to   one  step  easily   throughinstructions.   Don't  despair.  You   canalways  return  to  this Tutor to simulateyour problem.
   2  We must return from an interrupt  routinewith the instruction  RETI  ( RETurn from Interrupt ) and not RET.
   2  To ensure that no  other interrupt occursduring this period and  therefore corruptsthe  register  contents  before  they  aresafe,  the  interrupts are disabled duringthese operations.
   2  This   completes  a   study  of  all  theinstructions available on the Z80 chip.
   2  The two instructions that manipulate thisflag are
   2  The last  lessons deal with  instructionsthat allow the  outside world to interruptthe processor.
   2  The final set of lessons introduces  morespecialised  registers  and  instructions,and looks at the way the Z80 can talk withthe outside world.
   2  The example shows the use of the  Refreshregister as a source of random numbers.
   2  STORE DEFB 6
   2  STORE BIN 69H
   2  One  Non-Maskable  Interrupt is availableon   the   Z80   chip.     The   interruptautomatically  performs an  RST or CALL toaddress 0066H on completion of the currentinstructions.  The  routine  at  0066H  isperformed.  The instruction RETN or RETurnfrom    Non-maskable   interrupt   returnscontrol back to the interrupted routine atits next instruction .
   2  MODE 2 is the most flexible,  the addressto  which  the  processor is forced is theindirect   address   held  in   a   memorylocation.   The  address  of  this  memorylocation  is  computed  from  the  contentof the  I  register,  which  provides  thehigh  byte  and  the  interrupting  devicewhich   provides  the  low   byte.   Sincethe   interrupt   routine   is   addressedindirectly  the   interrupts  are   termedvectored interrupts.
   2  MODE 1 is the  one  used by  the Sinclairsystem  ROM.  It is set by the instructionIM 1. This mode is similar in operation tothe  Non Maskable Interrupt   except  thatprocessor is  restarted  at  0038H insteadof 0066H as in the NMI.
   2  MODE 0 is set by  the  instruction  IM 0.This mode is the one described previously,where the RST n instruction is forced ontothe  data  highway to  fool the  processorinto performing the restart.
   2  LOOP  LD A,R
   2  LD HL,22528
   2  Interrupts  fall  into  two  types,  Non-Maskable Interrupts (NMI)  and    MaskableInterrupts (MI). Maskable interrupt can beignored by the software, but NMIs cannot.
   2  Hence interrupt routine take the form:-
   2  Entry   into   a    maskable    interruptautomatically disables interrupt.
   2  EI    Enable Interrupts.   After one more       single  byte  instruction,  further       interrupts are accepted.
   2  DI    Disable Interrupts immediately.
   2  An interrupt  originates from outside theprocessor,  requesting it to break off itscurrent  sequence of  operations  and dealwith some other function.
   2  An  interrupt  can  occur  at  any  time.It   follows   therefore   that   if   theinterrupted  program is  to  be  continued(i.e. be re entered),  the contents of anyregister that the  interrupt routine uses,must be stored or  pushed onto the  stack,and reloaded  or  POPped  from  the  stackbefore returning
   2  35.  Finale
   2  34.  Interrupts
   2  33.  Processor control instructions
   2  32.  Block I/O instructions
   2  31.  Block search instructions
   2  30.  Block tranfer instructions
   2  29.  Block instructions - introduction
   2  28.  Input/Output instructions
   2  27.  The alternative set of registers
   2  26.  The index registers
   2   SBC HL,DE
   2   SBC HL,BC
   2   LD B,(HL)
   2   LD A,(NUM1)
   2   LD A,(DE)
   2   LD (LREG),HL
   2   LD (HL),A
   2   LD (HL),0
   2   LD (22529),A
   2   LD (22528),A
   2   JR NZ,LOOP
   2   JR LOOP1
   2   EX AF,AF'
   2   DJNZ LOOP3
   2   DJNZ LOOP1
   2   ADD A,(HL)
   2    GOOD  LUCK  and HAPPY  PROGRAMMING
   2       Load earlier lessons for revision
   2         EXAMPLE OF RELATIVE JUMPS
   2              LESSONS  26 - 35
   2              Ex - using alternative set
   2              Ex - use of index registers
   2              Ex - control instructions
   2              Ex - block transfer
   2              Ex - block search
   2              Ex - block I/O
   2              Ex - I/O instructions
   2               INTRODUCTION
   2               A after   (HL)     A before
   2                INTRODUCTION
   2                 INTERRUPTS
   1 yek yna sserp neht ,epat tratS
   1 where x is any number and is unaffected bytne instruction.
   1 uoloc dilavnI
   1 transfer (HL) to (DE), increment HL and DE, decrement BC, set PV flag if BC=0
   1 transfer (HL) to (DE), decrement HL, DE, and BC, set PV flag if BC=0
   1 the port whose number is in C
   1 the memory location (IY)
   1 the memory location (IX)
   1 the memory location (DE)
   1 the memory location (BC)
   1 the location (HL)
   1 the contents of the Accumulator is eXclusively ORed with
   1 the contents of
   1 the computer is HALTed until an interrupt comes to awake it again
   1 the carry flag is set, ie Set Carry Flag
   1 the carry flag is inverted, ie Compliment Carry Flag
   1 the alternative AF registers
   1 the accumulator is ComPared with
   1 the Stack Pointer
   1 the Refresh register
   1 the RETurn address is POPped from the stack
   1 the L register
   1 the Interrupt vector register
   1 the IY register
   1 the IX register
   1 the HL register
   1 the H register
   1 the Flag register
   1 the E register
   1 the DE register
   1 the D register
   1 the C register
   1 the BC, DE, HL registers are all EXchanged with the alternative set
   1 the BC register
   1 the B register
   1 the Accumulator is logically ORed with
   1 the Accumulator is logically ANDed with
   1 the Accumulator is NEGated, ie made negative
   1 the Accumulator
   1 the AF registers
   1 search from (HL) Incrementing BC bytes for data in Accumulator
   1 search from (HL) Decrementing BC bytes for data in Accumulator
   1 rotate the accumulator and carry Right
   1 rotate the Accumulator and carry Left
   1 rotate the Accumulator Right, shifting bit 0 into Carry
   1 rotate the Accumulator Left shifting bit 7 into Carry
   1 rotate Right Decimal contents of (HL) with least significant end of Accumulator
   1 rotate Left Decimal contents of (HL) with least significant end of Accumulator
   1 reSTart at address
   1 r single register     dd   double register* flag affected        . flag not affected     n/v    instruction not valid
   1 push the return address to stack and CALL
   1 port with the above number
   1 perform relative jump to
   1 perform jump to
   1 output from (HL) to port (C) increment HL, decrement B
   1 ouTput to port (C), from block from (HL) Decrementing HL for B bytes
   1 ouTput from (HL) to port (C) block from (HL) Incrementing for B bytes
   1 orre retemaraP
   1 oog on POTMAR
   1 of moor oN
   1 oUTput from (HL) to port (C) Decrement HL, decrement B
   1 norw tpircs+
   1 nemugra dilavnI
   1 memory location
   1 location (IY+offset)
   1 location (IX+offset)
   1 lif fo dnE
   1 lcniS 2891 
   1 is loaded with
   1 is Shifted Right Logically, 0 is shifted into bit 7
   1 is Shifted Right Arithmetically, sign bit unchanged
   1 is Shifted Left Arithmetically, 0 is shifted into bit 0
   1 is Rotated Right, shifting bit 0 into Carry
   1 is Rotated Left shifting bit 7 into Carry
   1 is PUSHed onto the stack and the SP decremented by 2
   1 is POPped from the stack and the SP incremented by 2
   1 is INCremented by 1
   1 is EXchanged with
   1 is DECremented by 1
   1 invert all bits in A register, ie ComPLiment
   1 instruction      Carry        Zero
   1 input data from
   1 if the Zero flag is set,
   1 if the Zero flag is not set,
   1 if the Sign flag is set, ie Minus,
   1 if the Sign flag is not set, ie Positive,
   1 if the Parity flag is sEt, ie Parity is Even,
   1 if the Parity flag is nOt set, ie Parity is Odd,
   1 if the Carry flag is set,
   1 if the Carry flag is not set,
   1 ib oot rebmuN
   1 iNput into (HL) from port (C) increment HL, decrement B
   1 iNput into (HL) from port (C) Decrement HL, decrement B
   1 iNput from port (C), into block from (HL) Incrementing HL for B bytes
   1 iNput from port (C), into block from (HL) Decrementing HL for B bytes
   1 i.e. carry   ' '   ' '      
   1 i.e. borrow    0 1 1 2   0 2
   1 i.e.  B8 hex = (B hex)* 16+ (8)* 1
   1 i.e.         0 0 0 0 0 1 0 1    +5
   1 has taken from it the carry and
   1 has added to it the carry and
   1 has added to it
   1 enable Interrupts. NOT PERFORMED BY SIMULATOR.
   1 eercs fo tXu
   1 disable Interrupts. NOT PERFORMED BY SIMULATOR.
   1 decrement B, if zero continue, if Not Zero perform relative jump to
   1 decimal Adjust Accumulator
   1 compare (HL) with A, increment HL, decrement BC
   1 compare (HL) with A, decrement HL, and BC
   1 change Interrupt Mode to
   1 block transfer (BC) bytes starting at (HL) to (DE) incrementing
   1 block transfer (BC) bytes starting at (HL) to (DE) decrementing
   1 becomes  c 1 0 1 1 0 0 0   1  c= old Carry
   1 becomes  1 1 1 1 0 0 0 1   0   (-15 dec.)
   1 becomes  1 1 0 1 1 0 0 0   1   old bit 0=1 RR r, and RR (HL)  instructions  ( RotateRight )  is similar to RL  except that theshift around the 9 bits is to the right.
   1 becomes  1   0 1 1 0 0 0 1 c  c= old Carry
   1 becomes  1   0 1 1 0 0 0 1 1  old bit 7=1
   1 becomes  0 1 0 1 1 0 1 1   1   (91 dec.)
   1 becomes  0 0 1 1 0 0 0 1   0   (49 dec.)
   1 becomes  0    1 1 0 0 0 1 0 0  (196 dec.)
   1 argorp otDz@
   1 and Carry are rotated Left
   1 and Carry are Rotated Right
   1 aerts dilavnI
   1 \e"\c*\c"\a*\a"#
   1 \["####\Y*
   1 \G:\B"\E*8F
   1 With an identical set for IY
   1 USOG tuohtiw?
   1 Tutor     [
   1 This is the number we  originally  assumedat the beginning of our discussion.
   1 There   are    no  double   register   SUBinstructions.
   1 The Accumulator has subtracted from it
   1 The   instruction   should  transfer   thecontents of  the  block  of  memory  1000-2000   to   memory   locations  1500-2500.Unfortunately  the  first  step  transfersthe contents of 1000 to 1500.  By the timeit is  the turn of  location  1500  to  betransferred    it   has    already    beenoverwritten in the first step.
   1 Space missing
   1 Since   the  contents of the  HL  registerpair can be the result of some calculationthe jump can be conditional.
   1 SUB r     )  SUBtract from A, n, r, or
   1 SUB n     )
   1 SUB (IX+d)                 XOR (IX+d)
   1 SUB (HL)  )                  (HL)
   1 STZ[\]^_OP7RST)
   1 SLA (IX+d)    SRA (IX+d)   SRL (IX+d)
   1 SET N,r      where N is the bit number 0-7SET N,(HL)
   1 SET N (IX+d)  RES N,(IX+d) BIT N,(IX+d)
   1 SCF         Set Carry Flag
   1 SBC HL,BC )  SuBtract from HL  with  carrySBC HL,DE )
   1 SBC A,r   )  SuBtract from A  with   carrySBC A,(HL))
   1 SBC A,n   )
   1 SBC A,(IX+d)  CP (IX+d)
   1 S7:DEFM "    EXAMPLE OF REGISTER PAIR ADDITION
   1 S6:DEFM "   EXAMPLES OF SINGLE REGISTER ADDITION
   1 RST n  where n = 00H, 08H, 10H, 18H, 20H,                  28H, 30H, or 38H.
   1 RRD    Rotate Right Decimal (/10)
   1 RR  (IX+d)
   1 RLD    Rotate Left Decimal  (*10)
   1 RLC (IX+d)    RL (IX+d)    RRC (IX+d)
   1 RETurn from Non-maskable interrupt: NOT PERFORMED BY SIMULATOR
   1 RETurn from Interrupt: NOT PERFORMED BY SIMULATOR
   1 RES N,(HL)
   1 P8:DEFM " We  can  therefore load a  register  pair"
   1 One  difficulty  with the  above  types ofjump is that,  if the start address of theprogram   were  changed,   all  the   jumpaddresses   would  require   modification.Relative   jumps   do   not   have    thisdifficulty.  The absolute  address is  notstored  with  the  instruction. It is  thedifference between the current contents ofthe  program   counter and the  address towhich  we  wish  to jump  that  is  storedwithin the instruction. Relative jumps arelimited to jumping backwards 128 locationsand forwards 127 locations.
   1 Offset too big
   1 Offset missing
   1 OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOk
   1 OF tuohtiw
   1 Number too large
   1 Number missing
   1 No OPeration is performed, inspite of this it takes .000001 seconds to do it
   1 No DEFB, or DEFW
   1 NOT DEFINED
   1 N tuohtiw ROF
   1 Missing space or ,
   1 Label too long
   1 Label not found
   1 LDIR     pointer incremented and  repeated         until number found or BC=0
   1 LDI      pointer incremented
   1 LDDR     pointer decremented and  repeated         until number found or BC=0
   1 LDD      pointer decremented
   1 LD r,r'     where r and r' are any of  the            following: A,B,C,D,E,H and L. 
   1 LD r,n      where n is a number 0 - 255
   1 LD r,(IX+d)   LD IX,nn     LD SP,IX
   1 LD r,(HL)  where r is any single register            A,B,C,D,E,H, or L.
   1 LD dd,nn    where dd is any register pair
   1 LD dd,(nn)
   1 LD A,(nn)   where nn is a number 0 - 65535
   1 LD (nn),dd
   1 LD (IX+d),r   LD IX,(nn)
   1 LD (IX+d),n   LD (nn),IX   EX (SP),IX
   1 JR e      where e is the displacement   inJR NC,e   the range 127 to -128
   1 JP Z,nn   jump on zero
   1 JP Z,nn     jump if zero  flag set
   1 JP NZ,nn  jump on not zero
   1 JP NZ,nn    jump if zero  flag not set
   1 JP NC,nn  jump on no carry
   1 JP NC,nn    jump if carry flag not set
   1 JP C,nn   jump on carry
   1 JP C,nn     jump if carry flag set
   1 Instruction unknown
   1 IN A,(n)    where n is the number of the                        input port (0-255)
   1 Hence to make a  positive  number negativewe invert all its binary  bits,  known  asComplimenting, and add 1.  The notation isgenerally termed 2s complement
   1 HL =1999   DE = 2499  and   BC = 1000  andusing the LDDR instruction, the same blockwill be  transferred  to the  same  memorylocations without this problem.
   1 HL = 1000  DE = 1500  and  BC = 1000.
   1 FLAGS$    Registers and Contents   % STAC
   1 Error after inst.
   1 EXAMPLES OF BINARY CODED DECIMAL NOTATION
   1 EX5A:DEFM " LD DE,8740
   1 EX DE,HL       exchanges register contents
   1 EFM "  INC DE
   1 DJNZ e    decrement and jump on  non zero
   1 DEFM "with  the  contents of a  pair  of  memory"
   1 DEFM "using this instruction.
   1 DEFM "together numbers of any length.
   1 DEFM "to the  non-valid  instructions  LD E,(nn)"
   1 DEFM "the only instruction  that  deals with the"
   1 DEFM "the Lower address.
   1 DEFM "the  form  LD r,r'  are  usually  used  to"
   1 DEFM "the  Spectrum   keyboard  is  interrogated"
   1 DEFM "the  Low byte is held in the location with"
   1 DEFM "results  can  be  displayed  easily.  This"
   1 DEFM "register addition only.  The double length"
   1 DEFM "register  pairs   with  the  contents   of"
   1 DEFM "register  pair  into  a  pair  of   memory"
   1 DEFM "register  pair  addition, as well, to  add"
   1 DEFM "port is  loaded  into  register r. Reading"
   1 DEFM "numbers are held in BC and DE so that  the"
   1 DEFM "numbers   8740  and  1260   using   single"
   1 DEFM "method of addition can be performed  using"
   1 DEFM "locations,   i.e.   LD (nn),BC   which  is"
   1 DEFM "locations,    with    instructions    like"
   1 DEFM "instructions  LD (nn),C  and  LD (nn+1),B."
   1 DEFM "instruction  therefore  divide
   1 DEFM "equivalent    to    the    two   non-valid"
   1 DEFM "displayed to the left of the registers.
   1 DEFM "data is transferred into the processor.
   1 DEFM "becomes  0 1 0 1 1 0 1 1   1   (91 dec.)
   1 DEFM "are  affected  by  this instruction and no"
   1 DEFM "another register pair. Two instructions in"
   1 DEFM "and  LD D,(nn+1).
   1 DEFM "Parity flags. The instruction IN F, (C) is"
   1 DEFM "LD DE,(nn). This instruction is equivalent"
   1 DEFM "IN r,(C), but the contents of the register"
   1 DEFM "Flag register separately.  Only  the flags"
   1 DEFM " into bit 7.
   1 DEFM " i.e.    7 6 5 4 3 2 1 0   C
   1 DEFM " This  example  effectively  multiplies  a"
   1 DEFM " There   are  no   instructions  to   load"
   1 DEFM " The  state  of  the  individual flags are"
   1 DEFM " The   example  adds   together   the  two"
   1 DEFM " The   SRL   or    Shift  Right  Logically"
   1 DEFM " Similarly,  we can load the contents of a"
   1 DEFM " STORE DEFB 25
   1 DEFM " OUT (C), r is a  similar  instruction  to"
   1 DEFM " LOW   DEFB 20
   1 DEFM " IN r, (C)  affect  the  Zero,  Sign,  and"
   1 DEFM " HIGH  DEFB 125
   1 DEFM "  LD HL,STORE
   1 DEFM "  LD HL,(STORE)
   1 DEFM "  LD C,A
   1 DEFM "  LD BC,32021
   1 DEFM "  LD BC,1260
   1 DEFM "  LD B,A
   1 DEFM "  LD A,E
   1 DEFM "  LD A,D
   1 DEFM "  LD A,15
   1 DEFM "  LD (HL),0
   1 DEFM "  LD (DE),A
   1 DEFM "  LD (BC),A
   1 DEFM "  JR LOOP1
   1 DEFM "  INC HL
   1 DEFM "  INC H
   1 DEFM "  DJNZ LOOP2
   1 DEFM "  ADD A,C
   1 DEFM "  ADD A,(HL)
   1 DEFM "  ADC A,B
   1 DEFM "         1 0 1 1 0 1 1 1   x   (183 dec.)
   1 DEFM "                               and Carry
   1 Cursor keys, delete,  and auto-repeat are as standard. BREAK returns you to menu.
   1 Can only ADD IX/IY
   1 CPIR     pointer incremented and  repeated         until number found or BC=0
   1 CPI      pointer incremented
   1 CPDR     pointer decremented and  repeated         until number found or BC=0
   1 CPD      pointer decremented
   1 CP r     Compares A with register r
   1 CP n     Compares A with n ( 0 - 255)
   1 CP (HL)  Compares A with memory location
   1 CCF         Compliment Carry Flag
   1 Bracket missing
   1 BIT N,(HL)
   1 All  these  instructions  affect  not onlythe Carry flag,  but the Zero,  Sign,  andParity flags.
   1 All   configurations of  ADC  instructionscan  be  used  with SBC or  SuBtract  withCarry  instructions.   The  operation   issimilar to SUB,  except that the result isdecremented  by  one if the carry flag  isset.
   1 ADDRESS MACHINE CODE     SOURCE CODE   
   1 ADD IX,dd     INC IX       DEC IX
   1 ADD A,r    where  r  is  any   single
   1 ADD A,n    where n is a number 0 - 255
   1 ADD A,(IX+d)  INC (IX+d)   AND (IX+d)
   1 ADD A,(HL)
   1 ADC A,(IX+d)  DEC (IX+d)   OR (IX+d)
   1 ADC A,(HL)
   1 ADC  HL,dd    SBC HL,dd  and EX DE,HL  arethe only exceptions.
   1 :yarra retcarahC
   1 :yarra rebmuN
   1 /^3^7^D^Q^^^e^o^v^
   1 .  Conventionally"
   1 -^1^>^E^V^O^]^j^q^{^
   1 *^.^;^B^F^M^W^^^e^u^|^
   1 '^+^2^9^=^D^K^R^b^i^y^
   1  to  thisfield.
   1  since each  digit  can have  one  of  tenstates, designated 0 - 9.
   1  i.e.  INI incrementing 
   1  i.e.    C    7 6 5 4 3 2 1 0
   1  gives     01000100
   1  give      01111110
   1  give      00111010
   1  bit    7   6   5   4    3   2   1   0
   1  after RRD              5 4        x 3
   1  after RLD      x 5     4 3
   1  You are trying to run code in allocated storage area. RET missing? Please EDIT 
   1  You are about to write to memory which   will affect your program. Please edit it.
   1  You are about to affect memory area not  allocated to you. Please edit program.   
   1  You  may go  through  the example as manytimes  as you like, until  you  understandit. If  you  still find  difficulty, pressBREAK, skip  over the lessons and re-ENTERthe  lesson  with  which  you  are  havingdifficulty. The  manual  however  gives anoutline of each lesson.
   1  X        Press SPACE to continue.
   1  While running this example try to predictthe  state  of  the  Zero  flag  after theinstruction has been performed.
   1  When you do understand the examples giventry  modifying  them   using  the  editor.Then try entering your own programs.   Allprograms should end with RET ( or return).Don't worry if you forget,  the  simulatorwill tell you.
   1  When  data is  transmitted from one placeto another, it is  possible  for errors toappear in the received  data.  Parity is asimple  way of  detecting single errors indata.  An  additional  bit is added to thedata  that  makes the total number of "1"sin  the  word  an  even  number.   If  thereceived word does not have an even numberof "1"s in it, then an error has occurred. In addition to this  even parity we coulduse odd parity,  where the word is made tohave an odd number of "1"s in it.
   1  We would still like to be able to performcalculations  on  decimal  numbers withouthaving to convert to binary or hexadecimalform.  Hexidecimal form  holds  a key to amethod of achieving this.
   1  We have so far treated information in theform of bytes or words. The Z80 does allowa  number  of  operations on  separate  orgroups of bits within one byte
   1  We  shall  then  look at  numbers held inregisters in more detail.
   1  We  require   16  different   symbols  torepresent  a  digit.   0-9  gives  us  thefirst  10  and  A-F  the final 6.   A listof   decimal,   binary,  and   hexadecimalequivalents  are given on the next screen.
   1  We  now introduce  two new registers, theindex  registers  IX and  IY.   These  tworegisters are identical in every way. Whatapplies to one applies to the other.
   1  We  have  discussed  flags  as individualbits.  This is  the way they  are normallyused.  They are however actually stored inthe Z80 in a register, designated as  F orflag register.  The  flags are arranged asfollows :-
   1  We  can also load a memory location  withthe  contents  of  the  Accumulator   withLD (nn),A   where  nn  is  the  number  oraddress of the memory location.
   1  We  can  therefore load a  register  pairwith  the  contents of a  pair  of  memorylocations,    with    instructions    likeLD DE,(nn). This instruction is equivalentto the  non-valid  instructions  LD E,(nn)and  LD D,(nn+1).
   1  We  can  load any of the  register  pairswith a  number between  0 - 65535 directlyusing instructions like LD HL,nn.
   1  We  can  input  data  directly  into  theaccumulator with  IN A,(n)  where n is thenumber  of  the  input  port between O and255. Similarly we can output data from theAccumulator    to   port   n   using   theinstruction   OUT (n),A.   No   flags  areaffected by these instructions
   1  We  can  also load any of  the  registerswith  a  number,  n, between  0  and   255directly, with instructions like LD C,123.We  shall  discuss later  from  where  thenumber  is copied. Suffice to say, at thisstage,  that  instructions are  stored  asnumbers.  For  example LD A,B is stored as78. Look up in Appendix A of your SpectrumManual  LD A,B  and the  number  78.  Someinstructions like LD A,B are stored as onenumber, others take up to four.
   1  We  can  also  input  data to any  8  bitregister  using the B and C registers. Theinstruction    IN r,(C),   transmits   thecontents  of  the  B  register to the portwhose  number  is in  the C register.  Theport  may   or  may  not   act  upon  thisinformation.   The  returned data from theport is  loaded  into  register r. Readingthe  Spectrum   keyboard  is  interrogatedusing this instruction.
   1  Use  of  the  BC  and  DE  registers  forindirect  addressing is limited to  the  Aregister.  i.e. LD (DE),A ; LD A,(BC) etc.
   1  Up to now we have only used  instructionsin   which  memory  locations  have   beenspecified  directly  in  the  instruction.Another  useful  method  of  specifying  amemory location is to use a number held ina   register  pair,   known  as   indirectaddressing.  The instruction LD B,(HL) forexample allows us to load or copy to the Bregister   the  contents  of   the  memorylocation   whose  address  is  in  the  HLregister pair.
   1  Try to predict the state of the Zero  andCarry   flags   before    performing   thecomparison. In the next lessons we will beusing these  flags extensively, to producemore interesting examples.
   1  Transfers LD .....LDI,LDIR,LDD,LDDR
   1  To perform  this  operation  the Z80 usestwo  further  flags, the  H  flag ( a Halfcarry  between  nibbles ),   and   N  flag( subtract  instruction  performed last ).Since these flags cannot be tested as partof a  conditional  jump etc. they  are  oflittle use.
   1  To  get  round this problem  use a label,declaring  it in the label column in frontof the  instruction  to which  you wish tojump.
   1  This simple example counts up the  numberof memory locations holding a number above192  and below  64 in the first  32 memorylocations.
   1  This presentation is termed  Binary CodedDecimal or BCD.
   1  This group of lessons will introduce  thethe idea of bit  manipulation and its  usein flag operations and in producing fastermethods of multiplication.
   1  This group of instructions, together withthe  interrupt  instructions, control  theaction of the processor.
   1  This  example  uses   shifts  and  rotateinstructions  to   multiply   two  8   bitnumbers together.   One  number is rotatedto  examine  each bit in turn.   The othernumber is also  shifted and  added  to thetotal  if the  bit is set.  This method isfar quicker than the  method  of  repeatedaddition.
   1  This  example  subtracts  1260  from 8740using  only  single  register subtraction.The  two  numbers  are  held in  allocatedmemory locations this time.
   1  This  example  is  a  simple  program  toillustrate   JP P,nn ,  and JP M,nn;  jumpif  positive and jump if minus.  Note thatthe   carry   is  still   operative,   andtherefore,  if you do not clear it  beforeADC  and SBC  the  later  jump  could   beunexpected.   In this example the carry isnot cleared, so  "look before you leap".
   1  This  example  illustrates  a  method  ofmultiplication.  There  are  other  fastermethods that will be shown later.
   1  This  example  effectively  multiplies  anumber held in the HL register pair by  10using addition to successively multiply by2.
   1  This   method   of   subtraction  can  beextended to any length number and registerpair subtraction.
   1  They cannot be  exchanged for HL  if thatregister  pair  is  only  implied  in  theinstruction, i.e. RRD.
   1  They are simply those in  which DE, or BCcan take part. The instruction  equivalentto EX DE,HL  is however  EX (SP),HL,  thatEXchanges the  contents  of  the bottom ofthe Stack with the HL register.
   1  They   can  take  the  place  of  the  HLregister  in  most  instructions.   It  issimpler to list the  instructions that canbe  performed  by the HL register  but notindex registers:-
   1  These instructions are shift instructionsin which the bit that falls out one end ofthe register or memory  location is pushedback into  the  other end.  The Carry flageither forms  part of  the number  shiftedthereby   making   it   9  bits  long   orduplicates the state of the bit that  fellout  of the register.  There are thereforefour different types of rotate.
   1  These examples  illustrate the  operationof rotate instructions. Modify the initialcondition  of   the   location  STORE   toinvestigate their operation further.
   1  These  instructions  can  be used also tofill  a  block  of  memory  with  a singlenumber.
   1  These  instructions  are  primarily  usedwhere counters are required. The operationon register  pairs   is also  useful    insequential operations on memory  locationsutilising indirect addressing.
   1  These  examples  show simple addition andsubtraction in  BCD format.   Remember  tokeep  in    Hex   display   mode   or  theillustrations will not appear in BCD.
   1  These   examples   illustrate    indirectaddressing. At this stage it is impossibleto  demonstrate  its  usefulness.   It  isemployed extensive in later examples
   1  These     examples     illustrate     themultiplication and division of BCD numbersby ten.
   1  There are too many registers called up,  to display. Program will RUN as normal. 
   1  There are only two more registers in  theZ80   to  discuss,   the  I  or  Interruptregister (see next lesson),  and the  R orRefresh register.
   1  There are only two instructions involvingthe alternative registers.
   1  There are  four groups of  four types  ofinstructions  that  perform  operations onblocks of memory. Since these instructionshave  similarities,  they  are  introducedtogether.
   1  There  is  one particular  relative  jumpinstruction  that is particularly   usefulnamely Decrement and Jump on Non-Zero,  orDJNZ.   The B register is decremented and,if  the result is not zero,  the processorperforms  a relative jump to the  computednew address.  If  the  result is zero thenthe next instruction in sequence is taken.DJNZ  allows  us  to  repeat  a  series ofinstructions a preset number of times. Thenumber of repeats is equal to the contentsof  the   B  register  when  the  loop  isentered, so long as  the  B  register doesnot   form   part   of   the   series   ofinstructions.
   1  There  is  one   instruction  similar  tothis  type:  EX DE,HL.   It  EXchanges thecontents of the DE  register pair with thecontents of the HL register pair.
   1  There  are  4  other  rotate instructionsthat  involve  the Accumulator  only. Theyare RLCA,  RLA,  RRCA,  and RRA.  They areidentical to RLC A, RL A, RRC A, and RR A,but only  affect  the  Carry flag, and aretwice as fast.
   1  There  are   three  logical  instructionsavailable  on  the  Z80.   They  are   allperformed  on a bit  by bit basis  betweenthe Accumulator and a number, register, orindirectly addressed memory location (HL).The result is left in the Accumulator.
   1  Their  prime  use  on   some  systems  isto   allow   external  hardware  to  forcethe  single   byte  instructions into  theprocessor,  thus   making  it   think  itsnext instruction is an RST n. It thereforeforms  a   method  of   interrupting   theprocessor. (see the lesson on interrupts).
   1  The two registers hold different parts ofa number.  Consider the decimal number 27.We  can think of this as having two parts;the high part ( or byte) is the 2 since itrepresents 2*10, the low part (or byte) isthe 7,  since it only represents 7*1.  Thetotal  number is  2*10+7*1=27.  Each digitcan  only  be  0 - 9   i.e.  10  differentnumbers.
   1  The total list is
   1  The step by step instructions making up aprogram are stored in memory,  a series ofsimilar  registers  or  memory  locations,external  to  the Z80 chip.  65536  memorylocations  can  be  accessed.   They   aredesignated  by their number between 0  and65535.  It  takes the Z80 longer to accessmemory than its own internal registers.
   1  The stack pointer is outside allocated   memory area. Please edit program.        
   1  The simulator will  display the  contentsof this  memory  location, in decimal,  inthe second column.
   1  The simulator uses the memory area  32000to  32255  for  the  pupils  programs. TheStack Pointer is initially  set to  32254,and works its way down towards the programarea.  Keep the SP at the top end of  thisarea  of   memory  to   ensure  that   thesimulator does not stop.
   1  The simplest  jump is JP nn,  where nn isthe  address  to  which the  program is tojump. This is  an  unconditional jump, theProgram  Counter  always  jumping  to  theaddress nn.
   1  The sign and  parity flags can be used inall absolute ( NOT relative) jumps, calls,and returns.
   1  The program has been completed. You may  EDIT or reRUN. Exit by pressing BREAK.   
   1  The power of these  instructions is  wellillustrated by the simple operation.
   1  The notation is :-
   1  The mnemonic for relative jumps is JR andcan  take  all the forms discussed  so farfor JP,  i.e.  JR , JR NC, JR C, JR NZ andJR Z.
   1  The maximum number that can be held in an8  bit  register  is
   1  The last four pairs of  memory  locationsin the  Stack are  displayed at the bottomright hand corner of the screen.   As withthe Program Counter, the position to whichthe Stack Pointer points is shown in Cyan.
   1  The last arithmetic instructions  to   bediscussed can be performed on any   singleor  double register(s).  These are INC andDEC.  INC  increments (or  increases)  thecontents   of  the  register,   or  memorylocation indirectly  addressed by  the  HLregister pair,  by one. DEC decrements (ordecreases ) the contents of the  register,or memory location indirectly addressed bythe HL register pair, by one.
   1  The instruction is PUSH dd. Continuing toPUSH  data on to the Stack  results in thedata  being pushed in at the bottom of theStack  and the Stack Pointer  working  itsway down through memory.
   1  The instruction INC SP is included at theend of the program  to  ensure  that SP isdisplayed.  The  actual  value  in the  SPregister is  immaterial  for  most  of itsapplications.
   1  The important input port on the  Spectrumis 254 ( FEH ), it is used  for  inputtingkeyboard data ( in bits 0-4 ,  bit 0 beingthe outside key ) and for cassette input.
   1  The fact that a single register can  onlyhold  numbers  up  to 255  and  the  totalmemory  available  is up to  65535,  is  alimitation.  For  this reason there are  awhole set of instructions on the Z80  thatdeal with  registers in pairs.  The  pairsare BC, DE, and HL register pairs.
   1  The examples illustrate the  operation ofthe logic  instructions.  The pupil shouldtest  his/her  understanding   further  bymodifying the contents of the 3 stores.
   1  The example  uses  the  LDIR  instructionto transfer the top third of the screen tothe  middle of the screen.
   1  The best way to describe these operationsis by example.  Both instructions  involvethe  Accumulator, and the  memory location(HL).  The  examples are in  Binary  CodedDecimal of course,  each  digit taking  upone  nibble  or  4 bits of the register ormemory location.
   1  The assembler, within this tutor, has oneinstruction   not  normally  found  in  anassembler,   namely   BIN.  The  assemblerallocates one memory location to the line,which  would  normally  be  labelled.   Itconstantly   displays  this   location  inbinary form.  The number  after BIN is thenumber   initially   inserted   into   thelocation.
   1  The assembler, that converts instructionsinto  machine  code, will  accept  Labels.Instead  of  putting  an  address into theprogram,  we  can  give  it  a  name.  Theassembler  will  then  allocate  a  memorylocation to it. The name must be called upin the program with its initial  conditionusing  the instruction  DEFB, DEFine Byte.
   1  The Spectrum works on  32 characters  perline and not 42 as does the TUTOR
   1  The RRD instruction therefore divides thedecimal  number by 10.   It  can  also  bestrung together to  divide any  length BCDnumber  by 10.  The  low  digit of the twodigit  decimal  number can be  isolated bythis instruction.
   1  The F register sometimes forms a registerpair in  conjunction with the Accumulator.This   pair   is  called   AF.   The  onlyinstructions   previously   mentioned thatinvolve  this  register pair are  PUSH andPOP.
   1  The BC, DE and HL registers may be PUSHedon to  and  POPped  from  the  Stack.  TheAccumulator may also be  PUSHed on to  theStack,  but  this  is  done with the  flagregister F, which will be discussed later.
   1  The 3 shift instructions are  illustratedusing a fixed initial value in the  memorylocation STORE.
   1  The  zero flag, like the carry flag,   isunaffected by any LD or EX instructions.
   1  The  two types of instructions  discussed( LD r,r' and  LD r,n ) can involve any ofthe  registers  considered.   Only  the  Aregister  can be loaded with the  contentsof a memory location.  The instruction  ofthe general form LD A,(nn) loads or copiesthe   contents   of   memory  location  nn( a number between 0 and 65535 )  into theA register.
   1  The  three logical instructions AND,  OR,and XOR affect the Zero,  Sign, and Parityflags.   The Carry flag is reset to "0" inall cases. Thus the limitation of no ClearCarry instruction can be  perfomed  simplyby a logical instruction.
   1  The  state  of  the  individual flags aredisplayed to the left of the registers.
   1  The  return  instruction  RET,  POPs  thereturn address from the Stack,  back  intothe  PC  register,  to continue where  themain program left off.   If the  number ofPUSHes  and CALLs in the  subroutine  doesnot equal the number of  POPs and RETurns,obviously this will not happen.
   1  The  processor,  under  the  programmer'sdirection,  has   the   capacity  to  makedecisions.  In  the  following  lessons weshall discuss these instructions that makea computer more than just a calculator.
   1  The  location  23060  holds a number  256less  than   the  start  of  the  Spectrumcharacter   set.   This   example   writescharacters  along  the  top  line  of  thescreen.   Once   you  have   followed  theindividual steps of the  program,  keepinga key  pressed will result in the  programbeing stepped through quickly.
   1  The  largest  positive number we can holdin a single register,  using this notationis  01111111   or  127  and   the  largestnegative number 10000000 or -128.
   1  The  instruction performed determines themeaning of the P/V flag.
   1  The  hex  digit  requires  adjustment  toavoid the digits  A-F.  Adding  6  to  thedigit, if these symbols appear, results incorrect adjustment.
   1  The  following  illustrates  the  way  inwhich  SET,  RES,  and  BIT can be used tomanipulate  individual  bits of a registeror memory location.
   1  The  examples that follow use the  colouras  well as  labels, so expect some colourchanges.
   1  The  example  uses  the  IX register as apointer to a  table of  two  byte numbers.Each number is to be divided by 2.
   1  The  example  loads  all registers,  thenswops  them  with  the   alternative  set.Having  re-loaded  the registers a furtherswop returns the original numbers.
   1  The  example  illustrates  each  type  ofinstruction that loads register pairs.  Italso  demonstrates  that a register/memorypair are still two individual registers ormemory locations  and  can  be  treated assuch.
   1  The  colour  screen  is  searched for thefirst  blue  and white  character.  In thesecond case the search  is  too  short  tofind a match.
   1  The  carry flag is not affected by eitherof these instructions.
   1  The  carry flag can be set to a "1"  withthe  instruction  SCF or Set  Carry  Flag.Although    there    are    no    specificinstructions  to  clear the carry flag  to"0"  there is an instruction to invert  itCCF or Compliment Carry Flag. We shall seelater that all logic instructions do clearthe carry flag.
   1  The  block  instructions  stop, not  withthe  pointer(s)  pointing at the addressesjust operated on,  but to  those  about tobe processed.  Hence if  equality is foundthey  point to the  next address  and  notthe memory location in which it was found.
   1  The  aspect  of  a computer that makes itmore than a calculator is  its ability  tochange  its  sequence of operations  as  aresult  of  earlier  instructions.  Withinthe  Z80  there  is  a counter  called theProgram Counter or PC. This counter  keepstrack of which  instruction  the processoris  to  perform  next.  By  modifying  itscontents, the  processor can be  jumped toany instruction in memory.
   1  The  arrangement of the screen, and otheruseful   memory   locations   within   theSpectrum are given in the TUTOR manual.
   1  The  address in  the first  column is thelow   byte  address.  The  second   columndisplays   the   contents  of  the pair ofmemory locations as a single number.
   1  The  Zero  flag  indicates  B=0  in thesecases
   1  The  Z80 is  the microprocessor  at   theheart of your Spectrum.  This program willteach  you the use of all the instructionsavailable  on  the Z80,  in  a  series  ofsimple  progressive lessons.
   1  The  Z80  has  a flag  that is set if thenumber of  "1"s in a number is even.  Thisflag  is  in  fact  the  same flag  as theoverflow flag. It is termed the P/V flag.
   1  The  Z80  allows  us to  rotate  left andright nibbles as well as bits.
   1  The  U  in OUT  is  dropped  to keep  themnemonic to a maximum of 4 letters.
   1  The  Stack is an area of external  RandomAccess Memory, that is used as a series ofregister  pairs,  in  conjunction  with  aStack Pointer. The Stack Pointer (SP) is asingle  double  length register within theZ80, capable of holding up to 65335.
   1  The  Stack  Pointer  can  take  part in anumber of instructions already discussed.
   1  The  Simulator  can  be  switched betweendecimal   and   hexadecimal   display   bypressing  "g",  when  a  program  is   notrunning.
   1  The  SRL r,  and   SRL (HL)  instructionsshift    the   register/memory    locationcontents right,  shifting  bit 0 into  theCarry flag and a "0" into bit 7.
   1  The  SRA r,  and   SRA (HL)  instructionsshift  the  register/memory  location (HL)right,  shifting bit 0 into the Carry flagand retaining the state of bit 7.
   1  The  SLA r,   and  SLA (HL)  instructionsshift  the  register/memory  contents leftshifting a "0"  into bit 0  and bit 7 intothe Carry flag.
   1  The  Refresh  register is  used  by  someforms  of   Random   Access  Memory  whichrequire continuous writing to maintain itsinformation. The R register is incrementedautomatically  every  time  the  processorfetches  each   part  of  an   instructionfrom memory. This provides the  programmerwith  a register  whose  contents  may  beconsidered random for some applications.
   1  The  R and I registers can be loaded fromthe Accumulator. The instructions involvedare simply  LD A,R :  LD R,A  :  LDA,I andLD I,A.
   1  The  OUT   group  is  identical to the INgroup, but  data  from memory is output toport   (C)   in   sequence   from   memorybeginning at location (HL)
   1  The  IN   group  of  block   instructionsinput data from the  input port  specifiedby the  contents of the  C  register  intoa block of memory starting at  the addressheld in the  HL  register,  the  length ofwhich is in the B register.  All  forms ofIN apply:-
   1  The  B  register is  used as a counter asthe IN group.
   1  The   summary   lists   all  instructionsavailable using the IX register. This listcan be repeated for the IY register.
   1  The   operation   luckily  also  makes  anegative   number    positive.   A    veryimportant point.
   1  The   only  instruction  for  which  (HL)cannot  be substituted by (IX+d) or (IY+d)is  JP (HL).   JP (IX)  and  JP (IY)   areavailable however.
   1  The   great   advantage  of   the   indexregisters   however   is   that   indirectaddressing is not simply  (HL) but (IX+d). The indirect address is calculated as thethe  sum  of the  contents  of  the  IX/IYregister and   the   offset   d  specifiedin the instruction.   This  offset can  beany number between 0 and 255.
   1  The   first  example  shows  nesting   ofsubroutines :  a subroutine  being  calledfrom within another subroutine.
   1  The   example  adds   together   the  twonumbers   8740  and  1260   using   singleregister addition only.  The double lengthnumbers are held in BC and DE so that  theresults  can  be  displayed  easily.  Thismethod of addition can be performed  usingregister  pair  addition, as well, to  addtogether numbers of any length.
   1  The   conditional   jumps  involving  thecarry and zero flags are:-
   1  The   Z80  allows  this  feature  by  theinstruction CALL.  The CALL instruction issimilar to the JP instruction except  thatthe   address  of  the   next   sequentialinstruction, held in the  PC  register, isPUSHed onto the Stack, prior to the jump.
   1  The   Z80   has    within  the  chip   analternative set of the  primary  registersAF, BC, DE  and HL.   These  are  normallydesignated  as  AF',  BC',  DE'  and  HL'.Although no operations can be performed onthese  registers,  they  can  be used as afast method of storage.
   1  The   Z80    accommodates    the    aboveadjustment,  with  the  instruction   DAA,Decimal    Adjust    Accumulator.     Thisinstruction is used after  an  8  bit ADD,ADC, SUB, or SBC to adjust the Accumulatorcontents  by  adding  6  to the nibble, ifeither nibble in the answer is above 9.
   1  The   SRL   or    Shift  Right  Logicallyinstruction  therefore  divides a positivenumber by 2.  As with  SRA  the Carry flagindicates the half.
   1  The    more    powerful   jump   is   theconditional jump.  The processor tests thestate of a flag,  before either jumping orcontinuing in  sequence.
   1  The    load   instruction   is   normallyabbreviated  to LD.  The simplest form  ofload  copies  data from  one  register  toanother, i.e. LD A,B  .
   1  Taking the initial conditions :-
   1  Taking  our  number 10111000  for exampleand   noting   that   bits  that  are  "0"contribute  nothing  to  the  number,  thedecimal equivalent of 10111000 is given by
   1  Take the hex number C (= 12 dec.). Adding6 gives 18 decimal or 12 hex.   Hence  thehex number looks  identical to the decimalanswer required.
   1  Take the example of an  LDIR  instructionwith the registers initially set to:-
   1  Summary - zero and carry flags
   1  Summary - the Stack and SP register
   1  Summary - simple input/output
   1  Summary - shift instructions
   1  Summary - rotate instructions
   1  Summary - relative jumps
   1  Summary - processor control instructions
   1  Summary - logical instructions
   1  Summary - jumps
   1  Summary - index registers
   1  Summary - increment and decrement
   1  Summary - decimal shifts
   1  Summary - comparisons
   1  Summary - calls and returns
   1  Summary - block transfer
   1  Summary - block search
   1  Summary - bit manipulation
   1  So far we have only dealt  with  positivenumbers. If we had taken 6 from 5 we wouldend up with the answer 255  with the carryset.  There is an interpretation of binarynumbers  that  allows  us to consider thisanswer as the negative number -1.
   1  So far we have  manipulated  data  withinthe  processor and  its associated memory. Our   Simulator   examples   have   shownhow  to  write  to  the  TV screen, (usingmemory  locations  4000H to 5AFFH).   Thistype  of  output is termed  memory addressmapped since it looks like memory. The Z8Oalso  supports  256  output and 256  inputports, or   8  bit   information  sources,external to memory.
   1  So far all instructions we have discussedthat  affect the Carry or Zero flags  alsoaffect the register concerned. There are anumber  of useful instructions  that  onlyaffect   flags.    The   compare   or   CPinstruction is one of these.
   1  Single and double register additions willobviously only give the correct result  ifthe answer is less than the maximum numberthe register(s) can hold. If it is greaterthan  this  a  carry  is  generated.   Theprocessor   holds   this  single  bit   ofinformation or flag, so that action can betaken over the occurrence of the carry. Ifthere  has  been  a  carry  on  the   lastarithmetic  operation the carry is said tobe set to a "1".  If not set it is said tobe a "0".
   1  Single  register subtraction takes  placewith the Accumulator. All the forms of ADDcan be used in subtract.  The abbreviationor  mnemonic SUB is always written withoutthe A,    which  is  implied.   Hence  theinstructions   are   SUB n,   SUB r,   andSUB (HL).  Again the result is held in theAccumulator.  The  carry flag is set to  a"1" if the result is outside the range  0-255.
   1  Since all RST calls are to the  beginningof memory (page 0) and  this  area on  theSpectrum is  ROM,  all the calls have beendefined   i.e. RST 00H  is  equivalent  toNEW, that  clears  out  all the memory andre-establishes  the  system.  Needless  tosay  the simulator does  not  perform  RSTinstructions.
   1  Since   double register  subtraction  canonly be performed with carry, the state ofthe  carry  flag  prior to  SBC HL,BC, andSBC HL,DE is important, and should be "0".
   1  Similarly, memory locations can be loadedindirectly  from any single register usingthe contents  of  the HL  register pair asaddress  i.e.  LD (HL),C.
   1  Similarly,  we can load the contents of aregister  pair  into  a  pair  of   memorylocations,   i.e.   LD (nn),BC   which  isequivalent    to    the    two   non-validinstructions  LD (nn),C  and  LD (nn+1),B. There   are  no   instructions  to   loadregister  pairs   with  the  contents   ofanother register pair. Two instructions inthe  form  LD r,r'  are  usually  used  toperform such an operation.
   1  Similar we can perform subtraction.
   1  SUMMARY - subtract with carry
   1  STORE DEFW 6000
   1  STORE DEFW 32000
   1  STORE DEFW 254H
   1  STORE DEFW 0
   1  STORE DEFB 7
   1  STORE DEFB 64
   1  STORE DEFB 25
   1  STORE DEFB 124
   1  STORE BIN 16
   1  STORE BIN 15
   1  ST3   BIN 0H
   1  ST2   BIN FH
   1  ST1   BIN 65H
   1  SRL r  divides +ve numbers 0 - 255 by 2
   1  SRA r  divides +ve and -ve numbers by 2
   1  SR2   LD A,(HL)
   1  SR1   CALL SR2
   1  SLA r  multiplies +ve and -ve numbers
   1  SBC HL,SP
   1  Remember, it is impossible for a  programto  destroy  your  computer. You'll need aa hammer to do that!
   1  Registers  are like pigeon holes in whichnumbers can be stored.  A single  registercan  store  any number between 0 and  255.The Z80 has many such registers. Initiallywe  shall consider only the  more  generalones:  designated A,B,C,D,E,H and L. The A( commonly called the Accumulator ) is themost  important,  since more  instructionsinvolve this register than any other.
   1  Register  pair  addition is performed  inconjunction with the HL register pair, andcan only involve BC or DE ( i.e. ADD HL,BCor ADD HL,DE ).  Again the result is  heldin  the  HL register pair,  and the  otherregister pair is unaffected.
   1  RRD  Rotates the Decimal number Right
   1  RRCA     rotate A right, carry duplicates
   1  RRC r,  RRC (HL)   instructions   (RotateRight Carry being duplicated )  is similarto  the  RLC  instruction  but is a  rightshift. Bit 0 is shifted into bit 7 and theCarry duplicates the old bit 0.
   1  RRC r    rotate r right, carry duplicates RRC (HL)
   1  RRA      rotate A and Carry right
   1  RR r     rotate r and Carry right
   1  RR instructions can be strung together todivide any length number by 2.
   1  RLD  Rotates the Decimal number Left
   1  RLCA     rotate A left, carry duplicates 
   1  RLC r, and RLC (HL)  ( namely Rotate LeftCarry duplicating ),  shifts  the contentsleft,  bit 7 rotating into bit 0,  and theCarry duplicating the transferred bit.
   1  RLC r    rotate r left, carry duplicates  RLC (HL)
   1  RLC and RRC  instructions  are  useful insequentially   interrogating   the   wholecontents of  a register without corruptingits contents.
   1  RLA      rotate A and carry left
   1  RL r, and RL (HL)  Rotate  Left,  rotatesthe  register/memory   location  with  theCarry as a 9th bit, left.
   1  RL r     rotate r and carry left
   1  RL instructions can be strung together tomultiply any length number by 2, since theCarry is transferred between  repeated  RLinstructions.
   1  Program stopped. You may re-RUN, EDIT or press BREAK to return to menu.  
   1  Program has successfully assembled. Press RUN, EDIT, or exit by pressing BREAK. 
   1  Program counter has jumped to non-valid  address. EDIT or reRUN program.        
   1  Proceed  through  the  menu  by  pressingENTER  to begin the highlighted lesson  orexample, and SPACE to jump to the next. Atanytime   BREAK  will  return you  to  themenu.
   1  Press SPACE to select and ENTER to start
   1  Press RUN to begin example, EDIT to edit, and BREAK to return to menu.
   1  Please confirm tape loading required  Y/N
   1  Perhaps a better description of load thanthe conventional one is copy, since a loadinstruction  copies the number held  in  aregister  or memory location into  anotherregister  or memory location.  As with allcopying the original remains unchanged.
   1  PUSH DD  where  DD  is AF, BC, DE, or HL.          From now on dd can be considered          as BC, DE, HL,or SP.
   1  POP dd retrieves data from the Stack intothe defined  register  pair.  The registerpair  is  loaded with the contents of  thememory location pointed to by SP. Then theSP register is incremented twice.
   1  Output port 254 is used to set the bordercolour ( bit 0-2 ), and output to cassette( bit 6 ).
   1  Output    OUT/OT..OUTI,OTDR,OUTD,OTDR
   1  Of all the instructions described to dateonly  DAA treats it as a parity flag.  Allothers either have  no effect on it or useit as  an  overflow  flag.  All subsequentinstructions  either  have no effect on itor use it as parity.
   1  OUTI     incrementing
   1  OUTD     decrementing
   1  OUT (C), r is a  similar  instruction  toIN r,(C), but the contents of the registerr is loaded into port (C).
   1  OTIR     incrementing and repeating
   1  OTDR     decrementing and repeating
   1  Now that hex notation has been introducedwe  can  discuss  how  the computer storesprograms  in  more  detail.    As  alreadymentioned, the  instructions are stored inmemory as numbers.  Some instructions onlyrequire a single  number,  others  requiremore.  Column 2  on  the Simulator displayshows   the   memory  contents   for   theinstructions in hex form.
   1  No   flags   are  affected  by  any  jumpinstructions including DJNZ.
   1  NUM2  DEFW 8740
   1  NUM2  DEFB 203
   1  NUM2  BIN 95
   1  NUM1  DEFW 1260
   1  NUM1  DEFB 212
   1  NUM1  BIN 81
   1  NOP or No OPeration  causes the processorto do nothing for one step. Since its codeis 0, a  cleared   memory   area  will  besequenced    through   until  a   non-zeroinstruction is found.
   1  Most of the  instruction in this and  thelast  lesson involve steps that change theenvironment   in   which   the   processoroperates.  It is  therefore  difficult  tosimulate these instructions. Little can belearnt from  single  stepping  through  anexample.  However changing interrupt modesetc. ( see next lesson )   on  a  PersonalComputer  is  advanced  programming.   Trygaining   experience   on   machine   codeprogramming  before  venturing  into  thisfield.
   1  Luckily  assemblers  takes account of allthese  complexities,  and  you will not berequired    to   learn   the   tables   inAppendix A of your Spectrum Manual.
   1  Like  ADC instructions  SBC  instructionscan be  strung together to   subtract  anylength number.
   1  LREG  BIN 0
   1  LOW   DEFB 20
   1  LOW   DEFB 0
   1  LOOP4 RR (HL)
   1  LOOP3 SRL (HL)
   1  LOOP3 RRC (HL)
   1  LOOP2 SLA (HL)
   1  LOOP2 RL (HL)
   1  LOOP2 LD A,(DE)
   1  LOOP2 DEC (HL)
   1  LOOP2 ADC HL,BC
   1  LOOP1 SRA (HL)
   1  LOOP1 SBC HL,DE
   1  LOOP1 RLC (HL)
   1  LOOP1 LD (STORE),HL
   1  LOOP1 LD (HL),A
   1  LOOP  SRL (IX+1)
   1  LOOP  RR A
   1  LOOP  LD HL,5800H
   1  LOOP  LD C,FEH
   1  LOOP  LD B,32
   1  LOOP  LD A,(HL)
   1  LOOP  INC (HL)
   1  LOOP  EXX
   1  LOOP  DEC (HL)
   1  LOOP  ADD HL,DE
   1  LDIR is similar to LDI, transferring datafrom  (HL) to  (DE) and  incrementing  thepointers,     but     this     instructionautomatically  repeats the operation untilBC=0 and the whole block is transferred.
   1  LDI  transfers  (HL) to (DE),  incrementsboth pointers, and decrements BC.  If BC=0the  P/V flag  is  0  (i.e. equivalent  toparity being odd ).  If  BC  does  not = 0the  P/V  flag  is  1 ( parity even ). LDItherefore  performs  only  one step of thetransfer    of    the    block,   allowingintermediate  operations  to be  performedbefore the instruction is repeated.
   1  LDDR  Repeats  LDD  until  BC=0 as in theLDIR instruction.
   1  LDD is similar to LDI except the pointersare Decremented.  Thus  HL and DE start atthe  top  of   the  respective  blocks  ofmemory.
   1  LD SP,(nn)
   1  LD HL,ST2
   1  LD HL,NUM1
   1  LD HL,LOW
   1  LD HL,56789
   1  LD HL,4000H
   1  LD HL,257
   1  LD HL,23040
   1  LD HL,(STORE)
   1  LD DE,8740
   1  LD DE,256
   1  LD DE,(23606)
   1  LD BC,100H
   1  LD A,(STORE)
   1  LD (nn),SP
   1  Just  as we can combine two registers  tohold  numbers up to 65535, we can  combineadjacent memory locations.  Conventionallythe  Low byte is held in the location withthe Lower address.
   1  Just  as   we  add  two  decimal  numberstogether,  carrying one forward if the sumof two  digits is  greater  than 9, we canadd two  binary numbers.  If  the  sum  isabove one, a one is carried forward.
   1  JP1   RET Z
   1  JP PO,nn  CALL PO,nn  RET PO  Parity  odd                                   =0
   1  JP PE,nn  CALL PE,nn  RET PE  Parity even                                   =1
   1  JP P,nn   CALL P,nn   RET P   Sign +ve
   1  JP M,nn   CALL M,nn   RET M   Sign -ve
   1  It must be remembered that  a  subroutinemay  require the use of a  register  whosecontents  are still  required in the  mainprogram.  Its  contents must  therefore bePUSHed  onto the stack or otherwise storedelsewhere, and retrieved at the end of thesubroutine.
   1  It is easier to use the  index  registersto interrogate tables than using  HL.  Theoffset can define the column in the  tableand  IX/IY register point to the beginningof the line. A subroutine could manipulatethe data within the line, using a constantIX/IY pointer.  Subsequent  lines can thenbe manipulated  simply  by using the  samesubroutine and changing the IX/IY registerto point to a different line.
   1  It is  only affected by double   registerarithmetic operations involving the  carryflag,  i.e. only affected by ADC HL,dd  orSBC HL,dd.
   1  Input     IN .....INI,INIR,IND,INDR
   1  Indirect jumps are  also available on theZ80   using  the  HL   register  pair. Theinstruction   JP (HL)  loads  the  programcounter    with  the  contents  of the  HLregister.  Thus   the  address of the nextinstruction  to be performed   is    equal to the contents of the HL register.
   1  In this interpretation  -1 must equal 255or 11111111, or  the  processor  would notbe able to take  6  from  5  and  get  theright answer.   Further  5 - 7 = -2 or 254or 11111110.   Bit 7, the most significantbit,  represents  the  sign ( + or - )  ofthe number.  When bit 7 is  "1" the numberis negative,  and when  "0"  the number ispositive.
   1  In general, if the two blocks overlap usethe instruction that ensures  the  initialfigure in the HL register lies within  theblock to which data is to be transferred.
   1  In a register each digit  or bit has onlytwo states. Therefore we can interpret thedigits as having weightings of
   1  In  these   abbreviationed   instructions( mnemonics ),  it is conventional to  putthe register affected first,   followed bythe register from which the information iscopied.  Hence  LD A,B copies the contentsof B into A or Accumulator.
   1  In  the XOR ( eXclusive OR ) instruction,if the bit in the Accumulator is the  sameas   that   in  the   number ,  then   thecorresponding  bit  in the result will  be"0". If they are different it will be "1".Another  way   of   looking  at  the   XORinstruction is if one OR the other is  "1"but NOT both, the answer will be "1".
   1  In  the OR instruction,  if a bit in  theAccumulator  OR in  the other number is  a"1",  the corresponding bit in the  resultwill be "1". If not it will be "0"
   1  In  the  AND instruction, if a bit in theAccumulator  AND  other  number  are  "1",then the  corresponding bit in the  resultwill be "1". If not it will be "0"
   1  If we were to take the top off a Z80 chipand, using a powerful  microscope, look ata register,  we would see that it consistsof 8 cells.  These  cells  are  capable ofbeing   switched   between  two  differentstates.  Conventionally  we  designate onestate  as  "1"  and  the other as "0". Thepattern of 1's  and 0's  could be 10111000say.
   1  If the condition is not met,  the programwill  not  CALL the  subroutine  or RETurnfrom it.
   1  If  the  condition is not met the programwill  not  jump,  call  a  subroutine   orreturn.
   1  If  n  is  the  number with  which  A  iscompared, then the following results :-
   1  If  a series of registers is PUSHed on tothe Stack, and subsequently POPped off theStack, they reappear in the reverse order.
   1  ITEM1 DEFW 560
   1  INC and DEC really only become useful  inconjunction   with   instructions   to  beintroduced shortly.
   1  IN r, (C)  affect  the  Zero,  Sign,  andParity flags. The instruction IN F, (C) isthe only instruction  that  deals with theFlag register separately.  Only  the flagsare  affected  by  this instruction and nodata is transferred into the processor.
   1  How  do we  interpret this pattern?   Theamswer is, anyway we like.  In this lessonwe  show   that  this   pattern  could  be184, -72, B8H, and even CP B. The only onethe  processor  has  built  into it is thelatter.
   1  Hence the result of the  instruction  SLAor   Shift  Left  Arithmetically   is   tomultiply  the  positive  number by 2.  TheCarry indicates a result greater than 255.
   1  Hence    the   SRA    or    Shift   RightArithmetically  instruction  divides  bothpositive and negative numbers by 2.
   1  HREG  BIN 0
   1  HIGH  DEFB 125
   1  HIGH  DEFB 0
   1  HALT   stops   the   sequencing  of   theprocessor  until  an interrupt is received( see next lesson ). After  the  interrupthas been dealt with, the instruction afterthe  HALT is performed.  Thus  the programcan  be   synchronised   with   operationsoutside the processor.
   1  Each time the program loops round press adifferent key between  "H" and  "ENTER" toinput a different number. Setting C to BFHinterrogates   keys   in   this range. SeeManual.
   1  Each digit in a number can  be consideredto have a weighting.  For decimal  numbersthese weightings are
   1  Each  digit  is  held  in  4  bits of theregister.   These  4  bits  are  called  anibble,  the whole  8 bit word is termed abyte.   Who said programmers have no senseof humour?
   1  EXX        exchanges BC,DE  and HL,  with            BC', DE' and HL' respectively.
   1  EX AF,AF'  exchanges  the contents of  AF            and AF'
   1  EX (SP),HL
   1  DEFM "  LD DE,22528
   1  DEFB is an  assembler  instruction  not aZ80   instruction.  The  allocated  memoryaddress is given in the first column.
   1  Conversion of a hex number to its decimalequivalent     follows     the    standardcalculation.
   1  Continuing  to  POP data from  the  Stackresults  in information being POPped  fromthe  bottom  of the Stack  and  the  StackPointer  working  its way back up  throughthe memory.
   1  Compare   CP .....CPI,CPIR,CPD,CPDR
   1  Colour  is used  to  illustrate  registerpair subtraction. Although ADC and SBC mayrequire the Carry flag to be cleared firstif the previous  calculation NEVER resultsin a carry being generated,  this step maybe omitted.  However it is often better tobe safe and include it,  than look for therandomly   occurring  fault  that  it  cangenerate.
   1  CP   compares  the  contents  of  the   Aregister  with  a number  (CP n),  anotherregister  (CP r),  or any memory  locationindirectly  addressed  through   the    HLregister  pair  ( CP (HL) ).  The  compareinstruction  is  effectively SUB  but  theresult does not affect the contents of theA register.
   1  But  first  we shall look  further at theprocessors flags.
   1  Both conditional and unconditional  CALLsand RETurns are available on the Z80.  Allfour   types    of   conditions    alreadyconsidered  ( NC, C, NZ  and  Z )  can  beused with CALLs and RETurns.
   1  Both  single  register and register  pairaddition are possible on the Z80.
   1  Both  pairs  of  instructions  ( LDIR andLDDR)  are  required.
   1  Block transfer instructions transfer  thecontents of an area of  memory to  anotherarea.  Two   pointers  are  used.  The  HLregister holds  the source address and theDE register  the destination address.  Thesize of the  block  to  be  transferred isheld in the BC register.
   1  Binary  numbers  are too  cumbersome  anddecimal  too   inconvenient   to   displaymultiple  register  numbers.   A method ofpresenting   binary   numbers   has   beendeveloped  to  get  round  these problems.Instead of  basing  the number on 10 as indecimal or 2 as in binary,  we  base it on16.  This  numbering   system  is   calledHexadecimal.
   1  Before each  instruction is executed  theinstruction is described in ENGLISH.   Tryto  work  out what  should  happen  beforepressing   any   key   to   perform    theinstruction.
   1  Before   loading   the  Stack  from   anyinternal register pair,  the Stack Pointeris decremented  twice, ( thus pointing  tothe  next pair of memory locations ).  Thecontents of the  register is  then  loadedinto the  Stack  indirectly  using the  SPregister as the address.
   1  Because  a  repeated   block  input is sofast the whole block of memory  is  likelyto be  filled with  the  single key press.It does however illustrate  the operation. Try different keys as before.
   1  BELOW INC D
   1  At  present  the  programs  that  can  bewritten are somewhat limited.
   1  As well as the standard CALL instructionsthat  incorporate the address to which theprocessor   is  to   jump,  the   Z80  hasinstructions in  which  the address of theCALL is  implied.  The instructions  RST n(where n=00H, 08H, 10H, 18H, 20H, 28H, 30Hor 38H )  calls  the  routine at  00n  hexdirectly.  i.e. RST 28H  is  equivalent toCALL 0028H.
   1  As well as performing  OR  operations  onour  own flags, this instruction is usefulin   SETting  a  group  of  bits  in   theAccumulator.
   1  As can be  seen the  effect of  stringingtogether RLD instructions is to multiply adecimal number by 10. It is also useful inisolating the  high  digit  from  the  twodigit number.
   1  As  you may now be able to infer, the  CPgroup  Compares   the  content  of  memorylocations in  a  block of  memory  with  apredetermined   number.    HL   holds  thepointer  and  the  BC register  the lengthof  the   block   to   be  searched.   TheAccumulator  holds  the  number for  whichthe  instruction   will  search.  If   thenumber  is  found  then  the  Zero flag isset.  As  before  the  P/V  flag indicateswhether BC=0.
   1  As  well  as  performing  ANDs on our ownflags,  this  instruction  is   useful  inmasking off areas of words,  or  resettinggroups of bits in the Accumulator.
   1  Apart  from  performing the  logical  XORfunction   on  our  own  flags   the   XORinstruction   is   useful   in   invertingindividual or groups of bits.
   1  Any   bit  in   a   register,  or  memorylocation using (HL),  can be SET to a "1".We  can also  RESet  any  bit to a "0". Totest the state of a bit in a  register, ormemory   location,   we   can    use   theinstruction BIT.   In this instruction theZero flag is set if  the  appropriate  bitis  "0"   and   reset  to  a  "0"  if  theappropriate  bit  is "1".   Hence  we  canproduce our  own flags to indicate  eventsand  then  act  upon  them   later in  ourprograms.
   1  Another  very useful flag included in allprocessors is the Zero flag.  This flag isset to  "1"  if the result  of  any singleregister arithmetic   operation   is zero.Otherwise it is cleared to"0".
   1  Another    assembler    instruction    isintroduced,  the  DEFW  instruction.   Theassembler allocates 2  memory locations tothe associated label. The number after theDEFW sets the initial conditions.
   1  An  area of  memory that illustrates wellthe  use of  instructions  is  the screen.This area has the following addresses:-
   1  Always  remember that a hex  number has abase of 16 decimal, a decimal number has abase of 10  and a  binary number a base of2.
   1  Although you can enter the address withinthe jump in  number  form,  if it does notequal the  address  of  the  start  of  aninstruction,  the simulator  will stop  atthe  JUMP.  This is because  the processorwould  perform  the  instruction  it findsat that address and anything could happen,and usually does.
   1  All the  above rotate  instructions  RLC,RL, RRC, and RR not only affect the  Carryflag  but  also  the Zero, Sign and Parityflags,  as  have  all  shift  instructionsdiscussed.
   1  All single registers can be loaded  usingthe HL register pair as a pointer.
   1  All examples are run using the Simulator.At  this  stage  the  only  areas  of  thesimulator   screen  to  consider  are  theSource  Code ( the third column that holdsthe instructions )  and  the  area  at thebottom of the screen, which  displays  thecontents  of  the  registers.  Other areaswill be described as they are required.
   1  All assemblers calculate the displacementfor relative jumps.   The assembler withinthis TUTOR is no exception. Relative jumpsshould be entered with labels.
   1  All  the  numbers  used  to  describe  aninstruction  are  given in  sequence alongthe line. Notice that numbers called up inan  instruction  appear towards the end ofthe string of numbers. The earlier numbersdetermine the type of instruction.   Sincethe  total  number of  instructions exceed256, a  prefix  number  is used to produceother sets of instructions.   The prefixesyou will find are EDH, CBH, DDH and FDH.
   1  All  other  single  registers  cannot  beloaded  directly  from a memory  location.Such operations  require two  instructionsvia the A register.
   1  All  block  instructions use  register(s)as a pointer(s)  to  scan  though  a blockof memory and another as a counter.
   1  All  block  instructions   have   similarmnemonics.    I   indicates    that    thepointer(s)  are   Incremented,   D    thatthe  pointer(s)  are  Decremented,  and  Rthat  the instruction  is  to be  repeateduntil the counter is zero.
   1  All  16  states of  the 4 binary bits arecovered by  0-F.  Hence only 2 hexadecimaldigits   are   required  to  display   thecontents of an 8 bit register. Our example10111000  divides  up into  1011  1000  orB8 Hex.  A  double  register  holding  say11001001 10111000  will  be represented byC9B8 hex.
   1  All   single   register   additions   areperformed with the Accumulator.  A  number(i.e. ADD A,6), the contents of a register(i.e. ADD A,B),  or  the  contents  of  anindirectly addressed memory location usingthe  HL  register  pair (i.e. ADD A,(HL) )can  be  added  to  the  Accumulator.  Theresult  is  held in the Accumulator.   Thesource of the addition is unaffected.
   1  ANS   DEFW 0
   1  ANS   BIN 0
   1  AND A or OR A will  clear the carry  flagand not affect any registers.  XOR A  willclear Carry and the Accumulator.
   1  ADD HL,SP
   1  ADC HL,SP
   1  ADC  instructions can be strung  togetherto perform the addition of two numbers  ofany length, as the examples will show.
   1  ABOVE INC E
   1  A subroutine is a part of a program  thatis  called from the main program and  oncecompleted   returns  back  to   the   mainprogram.  The subroutine is usually calledfrom a number of places in the program.
   1  A second form of addition is available onthe Z80,  for  both  single  and  multipleregisters,   known   as  add  with  carry;abbreviated  to ADC.  They are similar  toADD  except that if the Carry flag is  setbefore   the   addition  the   result   isincremented   by   one.   All   previouslymentioned   ADD   instructions   can    beperformed as ADC.
   1  A  useful  operation  would  be to make apositive  number negative. Changing  bit 7does  not  do  this.   Take  the  positivenumber  2  or  00000010  and  its negativeequivalent -2  or 11111110 for an example.Inverting all bits of the binary number of+2 gives 11111101, which is  1  less  thanthat  for -2.
   1  A  single  register can hold  0-255,  256different numbers. If we put two registersside by side,  such as HL,  the H registerholding  the High byte and the  L  holdingthe  Low  byte,  then we can hold  in  theregister  pair the number H*256+L*1 in thesame way as 27=2*10+7*1.  The maximum thatcan  be  held  in  a   register   pair  istherefore    255 * 256 + 255 = 65535.   Byconvention  the  high  byte  is  stored inthe  first  register in the register  pairname.
   1  A  shift instruction is one in which  thebits of a  register or memory location aremoved   sideways,  left  or  right to  theadjacent bit.  As we shall see, this givesus   a   means   of  division  as well  asmultiplication.
   1  9.  Compare
   1  8.  Zero Flag
   1  7.  Increment and Decrement
   1  6.  Subtraction and the Carry Flag
   1  5.  Addition and the Carry Flag
   1  4.  Indirect Addressing
   1  3.  Register Pairs
   1  25.  Decimal rotating
   1  24.  Rotate instructions
   1  23.  Shift instructions
   1  22.  Logical instructions
   1  21.  Bit manipulation
   1  20.  S and P/V flags in instructions
   1  2.  Simple Load Instructions
   1  19.  The flag register and AF
   1  18.  Parity
   1  17. Positive and negative notation
   1  16. Binary Coded Decimal notation
   1  15. Hexadecimal notation
   1  14. Binary notation
   1  13. Calls to subroutines
   1  12. The Stack
   1  11. Relative jumps
   1  10. Conditional and unconditional jumps
   1  1.  Registers and Memory
   1  0 1 0 0 0 1 1 1  parity flag is set since                  number of "1"s is 4
   1  0 0 1 1 0 1 0 0  parity flag is  not  set                  since  number of "1"s is                  3 i.e. odd.
   1  &    clears all  ENTER tabs to next line STOP  assembles   SPACE tabs in label are
   1   or     1 1 1 0 0 0 1 0   x   (-30 dec.)
   1   gives      1 0 0 1 0 0 1 1
   1   gives      0 0 1 1 1 0 0 1
   1   add 1      1 1 1 1 1 0 1 1    -5
   1   add 1      0 0 0 0 0 1 0 1    +5
   1   XOR (HL)
   1   THE FLAG REGISTER AND AF REGISTER PAIR
   1   SUB (HL)
   1   SUB           *    n/v     *   n/v
   1   SET 6,(HL)
   1   SBC A,(HL)
   1   SBC           *     *      *    *
   1   RR (IX+0)
   1   RES 3,(HL)
   1   OUT (C),D
   1   OUT (254),A
   1   Loading error
   1   LD IX,ITEM1
   1   LD HL,NUM2
   1   LD HL,HIGH
   1   LD HL,64000
   1   LD HL,581FH
   1   LD HL,5800H
   1   LD HL,4589H
   1   LD HL,32100
   1   LD HL,22550
   1   LD HL,22528
   1   LD HL,16384
   1   LD HL,1000
   1   LD HL,(STORE)
   1   LD HL,(LOW)
   1   LD E,(HL)
   1   LD DE,NUM2
   1   LD DE,8000
   1   LD DE,4800H
   1   LD DE,3812H
   1   LD DE,34567
   1   LD DE,33
   1   LD DE,256
   1   LD DE,2468H
   1   LD DE,22528
   1   LD DE,200
   1   LD DE,(STORE)
   1   LD DE,(NUM2)
   1   LD C,FEH
   1   LD C,254
   1   LD C,(HL)
   1   LD BC,800H
   1   LD BC,32021
   1   LD BC,32
   1   LD BC,1280
   1   LD BC,1260
   1   LD BC,12345
   1   LD BC,10H
   1   LD BC,1024
   1   LD B,20H
   1   LD A,255
   1   LD A,(BC)
   1   LD A,(22530)
   1   LD (STORE),HL
   1   LD (STORE),DE
   1   LD (STORE),A
   1   LD (LOW),DE
   1   LD (HL),A5H
   1   LD (HIGH),A
   1   LD (BC),A
   1   LD (ANS),HL
   1   LD (ANS),A
   1   LD            .     .      .    .
   1   JR Z,LOOP
   1   JR NC,JP1
   1   JP P,LOOP1
   1   JP NZ,LOOP2
   1   JP NZ,LOOP1
   1   JP M,LOOP2
   1   INC (HL)
   1   INC           .     .      *    .
   1   IN A,(C)
   1   Error  found  during  assembly. Please  correct before running program.        
   1   EXAMPLE USING REGISTER PAIR SUBTRACTION
   1   EX DE,HL
   1   EX (SP),HL
   1   EX           n/v    .     n/v   .
   1   Digit      3    2    1     0
   1   DJNZ SR1
   1   DJNZ LOOP4
   1   DEFW 9634
   1   DEFW 884
   1   DEFW 5937
   1   DEFW 187
   1   DEC (HL)
   1   DEC           .     .      *    .
   1   CALL SR1
   1   CALL NC,ABOVE
   1   CALL C,BELOW
   1   BIT 2,(HL)
   1   After each lesson, step by step examplesare   given.   To  further  improve   yourunderstanding of the topic,  you may  thenmodify  or rewrite the examples,  and  runthem without fear of crashing the system.
   1   AND (HL)
   1   ADD A,230
   1   ADD A,128
   1   ADD           *     *      *    .
   1   ADC HL,HL
   1   ADC           *     *      *    *
   1   A > n               0          0
   1   A = n               0          1
   1   A < n               1          0
   1    bit  7      S    Sign
   1    bit  6      Z    Zero
   1    bit  5           Not used
   1    bit  4      H    Half carry
   1    bit  3           Not used
   1    bit  2     P/V   Parity and overflow
   1    bit  1      N    Subtract last
   1    bit  0      C    Carry
   1    Summary - loading register pairs
   1    INCREMENT AND DECREMENT INSTRUCTIONS
   1    EXAMPLES OF INPUT/OUTPUT INSTRUCTIONS
   1    EXAMPLE OF SINGLE REGISTER SUBTRACTION
   1    Do you wish to enter lessons?   Y/N
   1    Detail area     16384 to 22527
   1    Colour area     22528 to 23295
   1    CALL Z,nn       RET Z     Zero set
   1    CALL NZ,nn      RET NZ    Not Zero
   1    CALL NC,nn      RET NC    No Carry
   1    CALL C,nn       RET C     Carry set
   1    ASSEMBLED CODE   LABELS INSTRUCTIONS
   1     invert   1 1 1 1 1 0 1 0
   1     invert   0 0 0 0 0 1 0 0
   1     Summary - Loading single registers
   1     Summary -  indirect addressing
   1     Summary -  addition
   1     POSITIVE AND NEGATIVE NUMBER NOTATION
   1     EXAMPLES OF SINGLE REGISTER ADDITION
   1     EXAMPLE OF USE OF REFRESH REGISTER
   1     Decimal   Binary    Hexadecimal
   1      THE ALTERNATIVE SET OF REGISTERS
   1      SUBTRACTION AND THE CARRY FLAG
   1      INTRODUCTION TO RUNNING SIMULATOR
   1      EXAMPLES OF SHIFT INSTRUCTIONS
   1      EXAMPLES OF ROTATE INSTRUCTIONS
   1      EXAMPLES OF LOGICAL INSTRUCTIONS
   1      EXAMPLES OF HEXADECIMAL NOTATION
   1      EXAMPLE USING THE ALTERNATIVE SET
   1      EXAMPLE OF USE OF INDEX REGISTER
   1      EXAMPLE OF REGISTER PAIR ADDITION
   1      EXAMPLE OF INCREMENT AND DECREMENT
   1       S and P/V FLAGS IN INSTRUCTIONS
   1       EXAMPLES OF INDIRECT ADDRESSING
   1       EXAMPLE USING ROTATE AND SHIFT
   1       EXAMPLE OF CALLS TO SUBROUTINE
   1       BLOCK INPUT/OUTPUT INSTRUCTIONS
   1        PROCESSOR CONTROL INSTRUCTIONS
   1        INIR incrementing and repeating
   1        INDR decrementing and repeating
   1        IND  decrementing
   1        EXAMPLES OF DECIMAL ROTATION
   1        EXAMPLES OF BIT MANIPULATION
   1        EXAMPLES OF BINARY NOTATION
   1        EXAMPLE OF CONDITIONAL CALLS
   1        BINARY CODED DECIMAL NOTATION
   1        ADDITIONS AND THE CARRY FLAG
   1        9       1001         9
   1        8       1000         8
   1        7       0111         7
   1        6       0110         6
   1        5       0101         5
   1        4       0100         4
   1        3       0011         3
   1        2       0010         2
   1        15      1111         F
   1        14      1110         E
   1        13      1101         D
   1        128  64  32  16   8   4   2   1
   1        12      1100         C
   1        11      1011         B
   1        10      1010         A
   1        1       0001         1
   1        0       0000         0
   1         SIMPLE LOAD INSTRUCTIONS
   1         Please stop tape recorder
   1         Please start tape recorder
   1         Loading has been stopped
   1         INPUT AND OUTPUT INSTRUCTIONS
   1         EXAMPLE OF BLOCK TRANSFER
   1         EXAMPLE OF BLOCK SEARCH
   1         BLOCK TRANSFER INSTRUCTIONS
   1          x   1 0 1 1 0 0 0 1
   1          x    0 1 1 0 0 0 1 0  (98 dec.)
   1          c   1 0 1 1 0 0 0 1
   1          EXAMPLES USING THE STACK
   1          EXAMPLE OF JUMP ON SIGN
   1          EXAMPLE OF BLOCK INPUT
   1          1 0 1 1 0 1 1 1   x   (183 dec.)
   1          1 0 1 1 0 0 0 1   x
   1          1 0 1 1 0 0 0 1   c
   1          0 1 1 0 0 0 1 0   x   (98 dec.)
   1           REGISTERS and MEMORY
   1           REGISTER PAIR EXAMPLES
   1           Loading lessons 26-35
   1           Loading lessons 18-25
   1           Loading lessons 10-17
   1           EXAMPLES OF ZERO FLAG
   1           EXAMPLES OF JUMPS
   1           128+64+32+16+8+4+2+1=255
   1           -  0 0 1 0 1 1 0 1
   1           +  0 0 1 0 0 1 0 1
   1            register
   1            Loading lessons 1-9
   1            LOGICAL INSTRUCTIONS
   1            INDIRECT ADDRESSING
   1            HEXADECIMAL NOTATION
   1            Ex - zero flag
   1            Ex - unconditional calls & rets           Ex - conditional calls
   1            Ex - single register addition
   1            Ex - simple load instructions
   1            Ex - shift instructions
   1            Ex - rotate instructions 2
   1            Ex - rotate instructions 1
   1            Ex - relative jumps 2
   1            Ex - relative jumps 1
   1            Ex - register subtraction
   1            Ex - register pair subtraction
   1            Ex - register pair loading
   1            Ex - register pair addition
   1            Ex - pushes and pops
   1            Ex - logical instructions
   1            Ex - jumps
   1            Ex - indirect addressing
   1            Ex - inc and dec instructions
   1            Ex - hex notation
   1            Ex - decimal rotation
   1            Ex - comparison instructions
   1            Ex - bit manipulation
   1            Ex - binary notation
   1            Ex - BCD notation
   1            Ex - +ve and -ve numbers
   1            EXAMPLES OF COMPARE
   1            1000  100   10    1
   1            01010110   ORed together
   1            01010110   ANDed together
   1            01010110    XORed together
   1             nn  is a number 0 - 65535
   1             THE ZERO FLAG
   1             SHIFT INSTRUCTIONS
   1             Lessons 1 - 9
   1             CALLS TO SUBROUTINES
   1             BC, DE, and HL.
   1             128+32+16+8=184.
   1              ROTATE INSTRUCTIONS
   1              RELATIVE JUMPS
   1              REGISTER PAIRS
   1              Loading error
   1              INTRODUCTION
   1              Ex - sign and parity flags
   1              BLOCK INSTRUCTIONS
   1              BIT MANIPULATION
   1              BINARY NOTATION
   1              = 11*16+8=184
   1              0 1 1 0 1 1 1 0
   1              0 1 1 0 0 1 1 0
   1               LESSONS  18 - 25
   1               INDEX REGISTERS
   1                Lessons 10 - 17
   1                DECIMAL ROTATE
   1                 x 5     4 3
   1                 r    dd      r   dd
   1                 COMPARE
   1                 BLOCK SEARCH
   1                  THE STACK
   1                   i.e. even.
   1                   PARITY
   1                   JUMPS
   1                     Carry      Zero
   1                         5 4         x 3
   1                                and Carry
   1                                    by 2
   1                                     (HL)